package com.ixion.mongo.entity;

import java.util.List;

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;

//TODO  add other query cnd genner
public class Query extends BasicDBObject {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Query() {
	}

	/**
	 * 实例化方法
	 * 
	 * @return 返回一个空JSON {}
	 */
	public static Query me() {
		return new Query();
	}

	/**
	 * 生成where条件
	 * 
	 * @param key
	 *            条件key
	 * @param val
	 *            条件比对值
	 * @return Query(查询器)对象
	 */
	public static Query where(String key, String val) {
		return (Query) Query.me().append(key, val);
	}

	/**
	 * 生成like条件
	 * 
	 * @param key
	 *            查询key
	 * @param val
	 *            like值
	 * @return Query查询条件对象
	 */
	public Query genLikeCnd(String key, String val) {
		return (Query) this.append(key, Query.me().append("$regex", "^[a-zA-Z\u4e00-\u9fa5-]*" + val + "[a-zA-Z\u4e00-\u9fa5-]*").append("$options", "i"));
	}

	/**
	 * 为条件增加like条件
	 * 
	 * @param cnd
	 *            待扩充条件
	 * @param key
	 *            like字段
	 * @param val
	 *            like值
	 * @return 查询统计
	 */
	public BasicDBObject appendLikeCnd(BasicDBObject cnd, String key, String val) {
		return cnd.append(key, Query.me().append("$regex", "^[a-zA-Z\u4e00-\u9fa5-]*" + val + "[a-zA-Z\u4e00-\u9fa5-]*").append("$options", "i"));
	}

	/**
	 * 生成大于条件
	 * 
	 * @param key
	 *            字段
	 * @param val
	 *            比较值
	 * @return 查询条件
	 */
	public Query genGTCnd(String key, Object val) {
		return (Query) this.append(key, Query.me().append("$gt", val));
	}

	public Query genORCnd(List<DBObject> cnds) {
		return (Query) this.append("$or", cnds);
	}

}
